package com.atguigu.campusintelligentassistantsystem.service;

import com.atguigu.campusintelligentassistantsystem.entity.Course;
import com.atguigu.campusintelligentassistantsystem.entity.StudentCourse;
import com.atguigu.campusintelligentassistantsystem.repository.CourseRepository;
import com.atguigu.campusintelligentassistantsystem.repository.StudentCourseRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class CourseService {

    @Autowired
    private CourseRepository courseRepository;

    @Autowired
    private StudentCourseRepository studentCourseRepository;

    /**
     * 获取所有课程
     * @return 课程列表
     */
    public List<Course> getAllCourses() {
        return courseRepository.findAll();
    }

    /**
     * 根据ID获取课程
     * @param id 课程ID
     * @return 课程信息
     */
    public Course getCourseById(Long id) {
        Optional<Course> course = courseRepository.findById(id);
        return course.orElse(null);
    }

    /**
     * 根据学生ID获取课程列表
     * @param studentId 学生ID
     * @return 课程列表
     */
    public List<StudentCourse> getCoursesByStudentId(Long studentId) {
        return studentCourseRepository.findByStudentId(studentId);
    }

    /**
     * 根据课程ID获取选课学生列表
     * @param courseId 课程ID
     * @return 选课学生列表
     */
    public List<StudentCourse> getStudentsByCourseId(Long courseId) {
        return studentCourseRepository.findByCourseId(courseId);
    }

    /**
     * 添加新课程
     * @param course 课程信息
     * @return 保存后的课程
     */
    public Course addCourse(Course course) {
        return courseRepository.save(course);
    }

    /**
     * 更新课程信息
     * @param course 课程信息
     * @return 更新后的课程
     */
    public Course updateCourse(Course course) {
        return courseRepository.save(course);
    }

    /**
     * 删除课程
     * @param id 课程ID
     */
    public void deleteCourse(Long id) {
        courseRepository.deleteById(id);
    }

    /**
     * 学生选课
     * @param studentCourse 选课信息
     * @return 选课结果
     */
    public StudentCourse enrollCourse(StudentCourse studentCourse) {
        return studentCourseRepository.save(studentCourse);
    }

    /**
     * 更新学生成绩
     * @param id 选课记录ID
     * @param score 成绩
     * @return 更新后的选课记录
     */
    public StudentCourse updateScore(Long id, Double score) {
        Optional<StudentCourse> studentCourse = studentCourseRepository.findById(id);
        if (studentCourse.isPresent()) {
            studentCourse.get().setScore(score);
            return studentCourseRepository.save(studentCourse.get());
        }
        return null;
    }
}